
#include <windows.h>
#include<commctrl.inl>

#include "hotkey.hpp"
// #include"MainWindow.hpp"
#pragma comment(lib, "Comctl32.lib") // 加载Comctl32.dll
//编译器在编译时链接Comctl32.lib库文件。Comctl32.dll是一个Windows系统自带的动态链接库，
//它提供了许多用户界面控件和图形功能，比如工具栏、状态栏、进度条等。
#include"MainWindow.hpp"


int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR, int nShowCmd) {
    constexpr char CLASS_NAME[]  = "Capture_Clash_ShortcutKey";
    Core *core_instance = new Core();

    // 定义窗口类
    WNDCLASS wc = {};
    wc.lpfnWndProc   = reinterpret_cast<WNDPROC>(WindowProc);
    wc.hInstance     = hInstance;
    wc.lpszClassName = CLASS_NAME;

    // 注册窗口类
    RegisterClass(&wc);

    // 创建窗口
    const HWND   hwnd = CreateWindowEx(
        0,                              // 可选，扩展样式
        CLASS_NAME,                     // 窗口类名
        "Capture Clash ShortcutKey",                // 窗口标题
                             WS_CAPTION        | \
                             WS_SYSMENU        | \
                             WS_MINIMIZEBOX    | \
                             WS_MAXIMIZEBOX,            // 窗口样式
        CW_USEDEFAULT, CW_USEDEFAULT,   // 窗口大小
        500, 300,                       // 窗口尺寸
        nullptr,                        // 父窗口
        nullptr,                        // 菜单
        hInstance,                     // 应用程序实例句柄
           core_instance                // 附加参数
    );

    // 显示窗口
    ShowWindow(hwnd, nShowCmd);
    UpdateWindow(hwnd);
    core_instance->setMainWindowHandle(hwnd);

    core_instance->setHooks() ;
    // 消息循环
    MSG msg  ={} ; // 定义消息结构
    while (GetMessage(&msg, nullptr, 0, 0)) {
        switch (msg.message) {
            case  WM_KEYUP : {
                DWORD proc_id;
                GetWindowThreadProcessId(reinterpret_cast<HWND>( msg.wParam), &proc_id);

                processKeyDownEvent(msg.message , msg.wParam ,  msg.lParam , proc_id) ;
            }
            default:
                TranslateMessage(&msg);
                DispatchMessage(&msg);
        }
    }
    return 0;
}

